package q692_topKFrequent;

import java.util.*;

public class Solution_1 {
    public static void main(String[] args) {
        System.out.println("B".compareTo("A"));
        System.out.println("AB".compareTo("A"));
        System.out.println("AB".compareTo("ABC"));
    }

    /*
    此题需要取出出现次数排名前k的单词list
    最为简单粗暴的方法：
    遍历所有的单词 使用一个map存储所有单词对应出现的次数
    将所有的未重复的单词都加入到一个list （res）中
    然后使用list自带的sort方法 其中传入一个匿名lambda函数
    比较两个单词在map中出现次数 如果相同 则使用string自带的compareTo方法
    此方法会返回两个字符串的字典序大小 例如wordA.compareTo(wordB) 如果前者是A 括号内是B 则返回 -1 也就是A是排序在B的-1位置 （A 在 B之前）
    如果不相同 则直接按照出现次数来排序 出现次数多的排在前面
     */
    public List<String> topKFrequent(String[] words, int k) {
        Map<String, Integer> map = new HashMap<>();
        for (String word : words) {
            map.put(word, map.getOrDefault(word, 0) + 1);
        }
        List<String> res = new ArrayList<>();
        for (Map.Entry<String, Integer> theEntry : map.entrySet()) {
            res.add(theEntry.getKey());
        }

        res.sort((word1, word2) -> Objects.equals(map.get(word1), map.get(word2)) ? word1.compareTo(word2) : map.get(word2) - map.get(word1));

        return res.subList(0, k);
    }
}
